#ifndef __WEBQUERY_H__
#define __WEBQUERY_H__

#include "DataSql.h"
#include "WebPage.h"
#include <string>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>

using namespace std;

class WebQuery
{
public:
    WebQuery();
    ~WebQuery();

    // 网页查询
    string doQuery(string &queryWord);

    // 加载倒排索引库
    void setInvertIndexLib();

    // 设置相同的id
    void getCommonId(vector<string> &words);

    // 计算查询词的权重值
    vector<double> getQueryWordsWeight(vector<string> &words);

    // 查找每篇文章的权重值
    map<int, vector<double>> getTextWeights(vector<string> &words);

    // 计算余弦相似度
    multimap<double, int> computeSimlarity(vector<double> &queryKeyWordsWeight, map<int,vector<double>> &texts);

    // 根据 docid 从 MySQL 数据库中查询网页数据
    string queryWebPageByDocId(int docid);

private:
    unordered_map<string, map<int, double>> _invertIndexLib; // 倒排索引库
    set<int> _commonId;                                      // 不同关键字都有的文章docid的交集
    DataSql _dataSql;                                        // 数据库连接对象
};

#endif